package com.example.comm.dataComm;

import org.springframework.util.StringUtils;

/**
 * 统一格式返回工具类
 *
 * @author raines
 */
public class BaseResponse {
    private static final String SUCCESS = "success";

    /**
     * 普通正确返回
     *
     * @param <T>
     * @return
     */
    public static <T> ResponseResult<T> makeOkRsp() {
        return new ResponseResult<T>().setCode(ResponseCode.SUCCESS).setMsg(SUCCESS);
    }

    /**
     * 普通正确返回+提示
     *
     * @param <T>
     * @return
     */
    public static <T> ResponseResult<T> makeOkRsp(String msg) {
        return new ResponseResult<T>().setCode(ResponseCode.SUCCESS).setMsg(msg);
    }


    /**
     * 带数据正常返回
     *
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ResponseResult<T> makeOkRsp(T data) {
        return new ResponseResult<T>().setCode(ResponseCode.SUCCESS).setMsg(SUCCESS).setData(data);
    }

    /**
     * 带数据以及提示信息正常返回
     *
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ResponseResult<T> makeOkRsp(T data, String message) {
        if (StringUtils.isEmpty(message)) {
            message = SUCCESS;
        }
        return new ResponseResult<T>().setCode(ResponseCode.SUCCESS).setMsg(message).setData(data);
    }

    /**
     * 普通错误返回
     *
     * @param msg
     * @param <T>
     * @return
     */
    public static <T> ResponseResult<T> makeErrRsp(String msg) {
        return new ResponseResult<T>().setCode(ResponseCode.FAIL).setMsg(msg);
    }

    /**
     * 设置返回编码和信息
     *
     * @param code 响应码
     * @param msg  响应信息
     * @param <T>
     * @return
     */
    public static <T> ResponseResult<T> makeRsp(int code, String msg) {
        return new ResponseResult<T>().setCode(code).setMsg(msg);
    }

    /**
     * 设置状态码 信息和数据返回
     *
     * @param code 状态吗
     * @param msg  信息
     * @param data 数据
     * @param <T>
     * @return
     */
    public static <T> ResponseResult<T> makeRsp(int code, String msg, T data) {
        return new ResponseResult<T>().setCode(code).setMsg(msg).setData(data);
    }

    /**
     * 设置状态码 信息和数据返回
     *
     * @param code 状态吗
     * @param msg  信息
     * @param data 数据
     * @param <T>
     * @return
     */
    public static <T> ResponseResult<T> makeRsp(ResponseCode code, String msg, T data) {
        return new ResponseResult<T>().setCode(code.code).setMsg(msg).setData(data);
    }
}
